The core issue with a simple array queue is that its indices only move forward, never resetting.
- While `enQueue` increments `rear` and `deQueue` increments `front`, the indices move linearly across the array.
- This linear progression means that space freed by `deQueue` operations at the lower indices is permanently unusable.
- This inefficiency leads to the critical drawback of Artificial Overflow.
- We define the queue as full when the `rear` index reaches MAX_SIZE (in our running example, 5).
- If `rear` reaches `MAX_SIZE`, the queue reports "full", even if significant unused space exists at the beginning of the array.
- The queue becomes unusable until it is completely re-initialized.
- While core operations are $O(1)$, workarounds like shifting all elements to fix this issue force an unacceptable $O(n)$ operation.
Naive Array Queue Properties
| Property | Assessment | Reason |
|---|---|---|
| enQueue | $O(1)$ | Fails on artificial overflow. |
| deQueue | $O(1)$ | Wastes space by not reclaiming it. |
| Space Efficiency | Poor | Leads to unusable empty slots. |